manager listen on /dev/vtpm.
Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
{
int rc;
+ if ((xen_start_info->flags & SIF_INITDOMAIN)) {
+ return -EPERM;
+ }
/*
* Register device with the low lever front-end
* driver
static struct tpm_private *tpm_private_get(void)
{
if (!my_priv) {
- my_priv = kzalloc(sizeof(struct tpm_private), GFP_KERNEL);
- if (my_priv) {
- tpm_private_init(my_priv);
- }
- }
- return my_priv;
+ my_priv = kzalloc(sizeof(struct tpm_private), GFP_KERNEL);
+ if (my_priv) {
+ tpm_private_init(my_priv);
+ }
+ }
+ return my_priv;
}
-static inline void tpm_private_free(struct tpm_private *tp)
+static inline void tpm_private_free(void)
{
- kfree(tp);
+ kfree(my_priv);
+ my_priv = NULL;
}
/**************************************************************
*/
int tpm_fe_send(struct tpm_private *tp, const u8 * buf, size_t count, void *ptr)
{
- int sent = 0;
+ int sent;
down(&suspend_lock);
sent = tpm_xmit(tp, buf, count, 0, ptr);
upperlayer_tpmfe = tpmfe_dev;
tpmfe_dev->max_tx_size = TPMIF_TX_RING_SIZE * PAGE_SIZE;
tpmfe_dev->tpm_private = tpm_private_get();
+ if (!tpmfe_dev->tpm_private) {
+ rc = -ENOMEM;
+ }
} else {
rc = -EBUSY;
}
break;
case XenbusStateClosed:
- if (tp->is_suspended == 0) {
- device_unregister(&dev->dev);
- }
- break;
+ if (tp->is_suspended == 0) {
+ device_unregister(&dev->dev);
+ }
+ break;
}
}
return err;
}
- tp->dev = dev;
- dev->data = tp;
+ tp->dev = dev;
+ dev->data = tp;
err = talk_to_backend(dev, tp);
if (err) {
- tpm_private_free(tp);
+ tpm_private_free();
dev->data = NULL;
return err;
}
static int tpmfront_remove(struct xenbus_device *dev)
{
- struct tpm_private *tp = dev->data;
+ struct tpm_private *tp = dev->data;
destroy_tpmring(tp);
return 0;
}
static int
tpmfront_resume(struct xenbus_device *dev)
{
- struct tpm_private *tp = dev->data;
+ struct tpm_private *tp = dev->data;
return talk_to_backend(dev, tp);
}
# Create vtpm and TPM emulator dirs
# apply patches for 1) used as dom0 tpm driver 2) used as vtpm device instance
-$(TPM_EMULATOR_DIR): $(TPM_EMULATOR_TARFILE)
- tar -xzf $(TPM_EMULATOR_TARFILE);
+$(TPM_EMULATOR_DIR): $(TPM_EMULATOR_TARFILE) tpm_emulator.patch tpm_emulator-0.2b-x86_64.patch
+ tar -xzf $(TPM_EMULATOR_TARFILE);
+ rm -rf $(TPM_EMULATOR_DIR)
mv tpm_emulator-0.2 $(TPM_EMULATOR_DIR);
-cd $(TPM_EMULATOR_DIR); \
patch -p1 < ../tpm_emulator-0.2b-x86_64.patch; \
patch -p1 <../tpm_emulator.patch
-$(VTPM_DIR): $(TPM_EMULATOR_TARFILE)
+$(VTPM_DIR): $(TPM_EMULATOR_TARFILE) tpm_emulator-0.2b-x86_64.patch vtpm.patch
tar -xzf $(TPM_EMULATOR_TARFILE);
+ rm -rf $(VTPM_DIR)
mv tpm_emulator-0.2 $(VTPM_DIR);
-cd $(VTPM_DIR); \
diff -uprN orig/tpm_emulator-0.2-x86_64/Makefile tpm_emulator/Makefile
--- orig/tpm_emulator-0.2-x86_64/Makefile 2005-09-15 19:21:14.845078568 -0700
+++ tpm_emulator/Makefile 2005-09-14 20:27:22.000000000 -0700
-@@ -1,16 +1,20 @@
+@@ -1,16 +1,22 @@
# Software-Based Trusted Platform Module (TPM) Emulator for Linux
# Copyright (C) 2004 Mario Strasser <mast@gmx.net>
+# Copyright (C) 2005 INTEL Corp.
# kernel settings
KERNEL_RELEASE := $(shell uname -r)
-KERNEL_BUILD := /lib/modules/$(KERNEL_RELEASE)/build
-+KERNEL_BUILD := $(XEN_ROOT)/linux-2.6.12-xen0
++CUR_DIR := $(shell pwd)
++LINUX_VERSION := $(shell cat $(CUR_DIR)/$(XEN_ROOT)/buildconfigs/mk.linux-2.6-xen | grep "LINUX_VER" | grep "2.6" | gawk '{ print $$3 }' )
++KERNEL_BUILD := $(XEN_ROOT)/linux-$(LINUX_VERSION)-xen0
MOD_SUBDIR := misc
COMPILE_ARCH ?= $(shell uname -m | sed -e s/i.86/x86_32/)
#define STATE_FILE "/var/vtpm/VTPM"
#define DMI_NVM_FILE "/var/vtpm/vtpm_dm_%d.data"
-#define VTPM_BE_DEV "/dev/vtpm0"
+#define VTPM_BE_DEV "/dev/vtpm"
#define VTPM_CTL_DM 0
#ifndef VTPM_MUTLI_VM